#include	<iostream>
#include	<algorithm>
#include	<vector>
#include	<list>
#include	<functional>
using	namespace	std;
//正常遍历⽅式
void	printV(vector<int>	&v)
{
	for	(vector<int>::iterator	it	=	v.begin();	it	!=	v.end();	it++)	{
		cout	<<	*it	<<	"	";
	}
	cout	<<	endl;
}
//普通函数
void	showInt(int	value)	{
	cout	<<	value	<<	"	";
}

int increase (int i) { return ++i; }

int	main(void)
{
	vector<int>	vInt;
	vInt.push_back(1);
	vInt.push_back(3);
	vInt.push_back(5);
	vInt.push_back(7);
	vInt.push_back(9);
	vector<int>	vInt2;
	vInt2.push_back(1);
	vInt2.push_back(2);
	vInt2.push_back(3);
	vInt2.push_back(4);
	vInt2.push_back(5);
	printV(vInt);
	//transform	使用回调函数
	// 要求有返回值
	transform(vInt.begin(),	vInt.end(),	vInt.begin(), increase);
	printV(vInt);
	cout	<<	endl;
	//	使用预定义函数
	transform(vInt.begin(),	vInt.end(),	vInt.begin(),	negate<int>());
	printV(vInt);
	cout	<<	endl;
	list<int>	listInt;
	listInt.resize(vInt.size());
	//	tansform	将⼀个容器的内容	修改⾄另⼀个容器中
	transform(vInt.begin(),	vInt.end(),	listInt.begin(), bind2nd(multiplies<int>(),	10));
	for_each(listInt.begin(),	listInt.end(),	showInt);
	cout	<<	endl;
	//	transform	将两个容器的内容	修改⾄⼀个容器中
	transform(vInt.begin(),	vInt.end(),	vInt2.begin(),	listInt.begin(), multiplies<int>());
	for_each(listInt.begin(),	listInt.end(),	showInt);
	cout	<<	endl;
	return	0;
}